"""
https://leetcode.cn/problems/binary-tree-preorder-traversal/description/

144. 二叉树的前序遍历
简单
相关标签
相关企业
给你二叉树的根节点 root ，返回它节点值的 前序 遍历。

 

示例 1：

输入：root = [1,null,2,3]

输出：[1,2,3]

解释：



示例 2：

输入：root = [1,2,3,4,5,null,8,null,null,6,7,9]

输出：[1,2,4,5,6,7,3,8,9]

解释：



示例 3：

输入：root = []

输出：[]

示例 4：

输入：root = [1]

输出：[1]

 

提示：

树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
 

进阶：递归算法很简单，你可以通过迭代算法完成吗？

"""

# Definition for a binary tree node.
from typing import List, Optional


class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        # 中 左 右
        mid=root.val
        left=self.preorderTraversal(root.left)
        right=self.preorderTraversal(root.right)

        return [mid]+left+right
        

if __name__=='__main__':
    solution = Solution()

    node1 = TreeNode(1,TreeNode(2),TreeNode(3))
    res=solution.preorderTraversal(node1)
    print(res)

    pass